import { floatToFixed2 } from '@/utils'
import { handleTree } from './tree'
import { deepClone } from './common'
// 格式化金额【分转元】
// @ts-ignore
export const fenToYuanFormat = (_, __, cellValue: any, ___) => {
  return `￥${floatToFixed2(cellValue)}`
}
/**
 * 小数或整数(不可以负数)
 * @param val 当前值字符串
 * @returns 返回处理后的字符串
 */
export const verifyNumberIntegerAndFloat = (val: string) => {
  // 匹配空格
  let v = val.replace(/(^\s*)|(\s*$)/g, '')
  // 只能是数字和小数点，不能是其他输入
  v = v.replace(/[^\d.]/g, '')
  // 以0开始只能输入一个
  v = v.replace(/^0{2}$/g, '0')
  // 保证第一位只能是数字，不能是点
  v = v.replace(/^\./g, '')
  // 小数只能出现1位
  v = v.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
  // 小数点后面保留2位
  v = v.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
  // 返回结果
  return v
}
/**
 * 验证百分比（不可以小数）
 * @param val 当前值字符串
 * @returns 返回处理后的字符串
 */
export function verifyNumberPercentage(val: string): string {
  // 匹配空格
  let v = val.replace(/(^\s*)|(\s*$)/g, '')
  // 只能是数字和小数点，不能是其他输入
  v = v.replace(/[^\d]/g, '')
  // 不能以0开始
  v = v.replace(/^0/g, '')
  // 数字超过100，赋值成最大值100
  v = v.replace(/^[1-9]\d\d{1,3}$/, '100')
  // 返回结果
  return v
}
// 手机号加密
export function phoneFormat(value: string): string {
  if (value) {
    const phone = value.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
    return phone
  } else {
    return ''
  }
}
// 手机号加密
export function nameFormat(value: string, num = 4): string {
  if (value) {
    let name = value.slice(0, num)

    if (value.length > num) {
      name = value.slice(0, num) + '...'
    }
    return name
  } else {
    return ''
  }
}
/**
 * 正整数验证
 * @param val 当前值字符串
 * @returns 返回处理后的字符串
 */
export function verifiyNumberInteger(val: string): string {
  // 匹配空格
  let v = val.replace(/(^\s*)|(\s*$)/g, '')
  // 去掉 '.' , 防止贴贴的时候出现问题 如 0.1.12.12
  v = v.replace(/[\.]*/g, '')
  // 去掉以 0 开始后面的数, 防止贴贴的时候出现问题 如 00121323
  v = v.replace(/(^0[\d]*)$/g, '0')
  // 首位是0,只能出现一次
  v = v.replace(/^0\d$/g, '0')
  // 只匹配数字
  v = v.replace(/[^\d]/g, '')
  // 返回结果
  return v
}

export const accAdd = (arg1: number, arg2: number) => {
  const num1 = Number(arg1)
  const num2 = Number(arg2)
  return num1 + num2
} // 加

export const accSubtr = (arg1: number, arg2: number) => {
  const num1 = Number(arg1)
  const num2 = Number(arg2)
  return num1 - num2
} //减

export const accMul = (arg1: number, arg2: number) => {
  const num1 = Number(arg1)
  const num2 = Number(arg2)
  return num1 * num2
} //	乘

export const accDiv = (arg1: number, arg2: number) => {
  const num1 = Number(arg1)
  const num2 = Number(arg2)
  return num1 * num2
} // 除
/**
 * 判断数组对象中是否有某个对象，有则替换无则添加
 * @param {*} initialArr 源数组
 * @param {*} obj 判定的对象
 * @param {*} pro 对象中的某个属性名（唯一，通常为id）
 **/
export function formateArrObjData(
  initialArr: any[],
  obj: { [x: string]: any },
  pro: string | number
) {
  // 判定数据是否为数组
  if (!(initialArr instanceof Array)) {
    return '请传入正确格式的数组'
  }
  // 判定数据是否为对象
  if (!(obj instanceof Object)) {
    return '请传入正确格式的对象'
  }
  if (!pro) {
    return '请传入正确格式的属性名'
  }

  const index = initialArr.findIndex((val) => val[pro].toString() === obj[pro].toString())
  const tempArr = initialArr
  // 如果有就替换  没有就添加
  if (initialArr.findIndex((val) => val[pro].toString() === obj[pro].toString()) !== -1) {
    tempArr.splice(index, 1, obj)
  } else {
    tempArr.push(obj)
  }
  return tempArr
}

/**
 * 验证数字密码 0—6位
 *
 */

export function verifiyDigitalCode(val: string) {
  // 匹配空格
  let v = val.replace(/(^\s*)|(\s*$)/g, '')
  // 去掉 '.' , 防止贴贴的时候出现问题 如 0.1.12.12
  v = v.replace(/[\.]*/g, '')
  // 只匹配数字
  v = v.replace(/[^\d]/g, '')
  // 超出6位的部分替换为空
  if (v.length <= 6) {
    return v
  } else {
    v = v.slice(0, 6)
    return v
  }

  // 返回结果
}

// 转换商品分类
export function formattingCategory(data: any) {
  let yudaoData = deepClone(data)

  let niushopData = yudaoData.map((item: { parentId: any; id: any; name: any; picUrl: any }) => {
    return {
      pid: item.parentId,
      category_id: item.id,
      category_name: item.name,
      category_full_name: item.name,
      image: item.picUrl
    }
  })

  let category = handleTree(niushopData, 'category_id', 'pid', 'child_list')
  return category
}
